* xdisp.c (push_display_prop): Don't set avoid_cursor_p. Return 0
authorChong Yidong <cyd@stupidchicken.com>
Sat, 5 Dec 2009 22:49:00 +0000 (22:49 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Sat, 5 Dec 2009 22:49:00 +0000 (22:49 +0000)
if push failed.
(handle_line_prefix): Set avoid_cursor_p here.  Check return value
of push_display_prop (Bug#5000).

src/ChangeLog
src/xdisp.c

index 5b88b3d89b0fa31ae0cb62cdbd777e26436a73a2..316e5804ffd4673dc82424203543d82437d96b84 100644 (file)
@@ -1,5 +1,10 @@
 2009-12-05  Chong Yidong  <cyd@stupidchicken.com>
 
+       * xdisp.c (push_display_prop): Don't set avoid_cursor_p.  Return 0
+       if push failed.
+       (handle_line_prefix): Set avoid_cursor_p here.  Check return value
+       of push_display_prop (Bug#5000).
+
        * xfaces.c (Fx_family_fonts): Handle 2009-07-14 change to return
        value of font_list_entities (Bug#5085).
 
index 05bcd136865da5da1df027a7fefa068c66faca5e..449d42dcf175fcb470bb02c8fef3dc4f23b0442f 100644 (file)
@@ -16384,22 +16384,20 @@ cursor_row_p (w, row)
 \f
 
 /* Push the display property PROP so that it will be rendered at the
-   current position in IT.  */
+   current position in IT.  Return 1 if PROP was successfully pushed,
+   0 otherwise.  */
 
-static void
+static int
 push_display_prop (struct it *it, Lisp_Object prop)
 {
   push_it (it);
 
-  /* Never display a cursor on the prefix.  */
-  it->avoid_cursor_p = 1;
-
   if (STRINGP (prop))
     {
       if (SCHARS (prop) == 0)
        {
          pop_it (it);
-         return;
+         return 0;
        }
 
       it->string = prop;
@@ -16426,8 +16424,10 @@ push_display_prop (struct it *it, Lisp_Object prop)
   else
     {
       pop_it (it);             /* bogus display property, give up */
-      return;
+      return 0;
     }
+
+  return 1;
 }
 
 /* Return the character-property PROP at the current position in IT.  */
@@ -16467,13 +16467,13 @@ handle_line_prefix (struct it *it)
       if (NILP (prefix))
        prefix = Vline_prefix;
     }
-  if (! NILP (prefix))
+  if (! NILP (prefix) && push_display_prop (it, prefix))
     {
-      push_display_prop (it, prefix);
       /* If the prefix is wider than the window, and we try to wrap
         it, it would acquire its own wrap prefix, and so on till the
         iterator stack overflows.  So, don't wrap the prefix.  */
       it->line_wrap = TRUNCATE;
+      it->avoid_cursor_p = 1;
     }
 }